//webpack打包管理工具
const webpack = require('webpack');
//项目常量定义
const PROJECT = require('./config/project.config.js');
//JS压缩插件在webpack中已经集成
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin');
//打包HTML文件
const HtmlWebpackPlugin = require('html-webpack-plugin');

//VueLoader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = { //相当于 export default
    /**
    * 入口 (Entry)
    * @see https://doc.webpack-china.org/configuration/entry-context/
    */
    entry: {
        index: './src/main.js'
    },

    /**
    * 输出 (Output)
    * @see https://doc.webpack-china.org/configuration/output/
    */
    output: {
        // output 目录对应一个绝对路径。
        path: PROJECT.PATH_DIST,
        // 此选项决定了每个输出 bundle 的名称。这些 bundle 将写入到 output.path 选项指定的目录下。
        filename: '[name].[hash].bundle.js',
        // 此选项会向硬盘写入一个输出文件，只在 devtool 启用了 SourceMap 选项时才使用。
        sourceMapFilename: '[name].[hash].bundle.map',
        //此选项决定了非入口(non-entry) chunk 文件的名称
        chunkFilename: '[name].[hash].chunk.js'
    },
    /**
     * 解析 (Resolve)
     * @see https://webpack.js.org/configuration/resolve/
    */
    resolve: {
        //自动解析确定的扩展，能够使用户在引入模块时不带扩展
        extensions: ['.js', '.vue', '.json'],
        //路径别名
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': PROJECT.PATH_SRC
        }
    },



    plugins: [ 
        /**
        * HtmlWebpackPlugin 简化了HTML文件的创建
        * https://doc.webpack-china.org/plugins/html-webpack-plugin
        * https://github.com/jantimon/html-webpack-plugin#configuration
        * 用于简化 HTML 文件（index.html）的创建，提供访问 bundle 的服务。
        */
        new HtmlWebpackPlugin({
            inject: true,
            template: PROJECT.PATH_HTML,
            minify: {
                removeComments: true,
                collapseWhitespace: true,
                removeRedundantAttributes: true,
                useShortDoctype: true,
                removeEmptyAttributes: true,
                removeStyleLinkTypeAttributes: true,
                keepClosingSlash: true,
                minifyJS: true,
                minifyCSS: true,
                minifyURLs: true,
            },
            hash: true,
            chunksSortMode: 'dependency'
        })
    ],
    
};